#include <stdio.h>
#include <math.h>

int main() {
    // 定义 double 类型变量
    double a, b, t, p, a_next, b_next, t_next;
    double pi, tmp1, tmp2;

    // 初始化 a = 1, b = 1/sqrt(2), t = 1/4, p = 1
    a = 1.0;
    b = 1.0 / sqrt(2.0);
    t = 0.25;
    p = 1.0;

    // 迭代 Gauss-Legendre 算法
    for (int i = 0; i < 5; i++) { // 增加迭代次数以提高精度
        a_next = (a + b) / 2.0; // a_next = (a + b) / 2
        b_next = sqrt(a * b);   // b_next = sqrt(a * b)

        tmp1 = a - a_next;
        tmp2 = tmp1 * tmp1;
        t_next = t - p * tmp2;  // t_next = t - p * (a - a_next)^2

        p = 2.0 * p;            // p_next = 2 * p

        // 更新变量
        a = a_next;
        b = b_next;
        t = t_next;
    }

    // 最终计算 pi
    tmp1 = (a + b) * (a + b);
    pi = tmp1 / (4.0 * t);

    // 输出结果
    printf("Calculated Pi: %.15f\n", pi);

    return 0;
}
